/**
 * Copyright © 2016-2025 The Thingsboard Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.terracloud.server.common.data.log;

import com.terracloud.server.common.data.id.DeviceId;
import com.terracloud.server.common.data.id.EntityId;
import com.terracloud.server.common.data.id.TenantId;
import com.terracloud.server.common.data.id.UserId;

/**
 * 基础统一日志服务接口
 * 提供统一的日志记录服务定义
 */
public interface BaseUnifiedLogService {

    /**
     * 记录终端日志（设备相关日志）
     *
     * @param deviceId 设备ID
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     */
    void logTerminal(DeviceId deviceId, LogType logType, LogLevel logLevel, String content,
                     TenantId tenantId, UserId userId);

    /**
     * 记录终端日志（设备相关日志）
     *
     * @param deviceId 设备ID
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     * @param additionalInfo 额外信息（可选）
     */
    void logTerminal(DeviceId deviceId, LogType logType, LogLevel logLevel, String content,
                     TenantId tenantId, UserId userId, String additionalInfo);

    /**
     * 记录终端日志（完整字段）
     *
     * @param terminalLog 终端日志实体
     */
    void logTerminal(TerminalLog terminalLog);

    /**
     * 记录平台日志（系统相关日志）
     *
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     */
    void logPlatform(LogType logType, LogLevel logLevel, String content,
                     TenantId tenantId, UserId userId);

    /**
     * 记录平台日志（系统相关日志）
     *
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     * @param additionalInfo 额外信息（可选）
     */
    void logPlatform(LogType logType, LogLevel logLevel, String content,
                     TenantId tenantId, UserId userId, String additionalInfo);

    /**
     * 记录平台日志（完整字段）
     *
     * @param platformLog 平台日志实体
     */
    void logPlatform(PlatformLog platformLog);

    /**
     * 记录通用日志（可指定实体）
     *
     * @param entityId 实体ID
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     */
    void log(EntityId entityId, LogType logType, LogLevel logLevel, String content,
             TenantId tenantId, UserId userId);

    /**
     * 记录通用日志（可指定实体）
     *
     * @param entityId 实体ID
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     * @param tenantId 租户ID
     * @param userId 用户ID（可选）
     * @param additionalInfo 额外信息（可选）
     */
    void log(EntityId entityId, LogType logType, LogLevel logLevel, String content,
             TenantId tenantId, UserId userId, String additionalInfo);

    /**
     * 记录简单日志（最简方式）
     *
     * @param logType 日志类型
     * @param logLevel 日志级别
     * @param content 日志内容
     */
    void log(LogType logType, LogLevel logLevel, String content);
}